home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Texteditors / XDME / include / keyhashes.h < prev    next >
C/C++ Source or Header  |  1996-09-26  |  5KB  |  185 lines

  1. /******************************************************************************
  2.  
  3.     MODUL
  4.     keyhashes.h
  5.  
  6.     DESCRIPTION
  7.     definition module for all keymodules
  8.  
  9. ******************************************************************************/
  10.  
  11. #ifndef KEYHASHES_H
  12. #define KEYHASHES_H
  13.  
  14. /**************************************
  15.         Includes
  16. **************************************/
  17.  
  18. #ifndef   EXEC_TYPES_H
  19. #include <exec/types.h>
  20. #endif /* EXEC_TYPES_H */
  21.  
  22. #ifndef   EXEC_NODES_H
  23. #include <exec/nodes.h>
  24. #endif /* EXEC_NODES_H */
  25.  
  26.  
  27. /**************************************
  28.         Globale Variable
  29. **************************************/
  30.  
  31.  
  32. /**************************************
  33.     Defines und Strukturen
  34. **************************************/
  35.  
  36. #ifndef KEY_INTERNAL
  37.  
  38. #define TCODE UBYTE
  39. #define TQUAL UWORD
  40. #define KEYTABLE void
  41. #define KEYSPEC  void
  42. #define HASH     void
  43.  
  44. #else
  45.  
  46. #ifndef HASHSIZE
  47. # define HASHSIZE    0x80    /* power of 2   */
  48. #endif
  49.  
  50. #ifndef HASHMASK
  51. # define HASHMASK  (HASHSIZE-1)
  52. #endif
  53.  
  54. /* all relevant bits of a possible qual-combi except for REPEAT and NUMLOCK */
  55. #ifndef  QUALMASK
  56. # define QUALMASK  0x77ff
  57. #endif
  58.  
  59. #define TCODE UBYTE
  60. #define TQUAL UWORD
  61.  
  62. struct keyspec {
  63.     TQUAL ks_qualifiers;
  64.     TQUAL ks_qualmask;
  65.     TCODE ks_code;
  66. }; /* struct keyspec */
  67.  
  68. struct KeyHash {
  69.     struct KeyHash *next;   /* next hash    */
  70. #if 0
  71.     UWORD       mask;    /* qual. mask   */
  72.     UWORD       qual;    /* qual. comp   */
  73.     UBYTE       code;    /* keycode        */
  74. #else
  75.     struct keyspec key;
  76. #endif
  77.     char     * comm;    /* command        */
  78.     char     * help;    /* online help  */
  79. }; /* struct KeyHash */
  80.  
  81.  
  82. struct _2Strings {
  83.     char  * from;
  84.     char  * to;
  85. };
  86.  
  87. struct _3Strings {
  88.     char  * from;
  89.     char  * to;
  90.     char  * help;
  91. };
  92.  
  93.  
  94. struct KeyTable {
  95.     struct Node      node;
  96.     struct KeyHash * hash[HASHSIZE];
  97. }; /* struct KeyTable */
  98.  
  99. #define HASH         struct KeyHash
  100. #define KEYTABLE     struct KeyTable
  101. #define KEYSPEC      struct keyspec
  102.  
  103. #define TWOSTRINGS   struct _2Strings
  104. #define THREESTRINGS struct _3Strings
  105.  
  106.  
  107.  
  108. #define KS_CODE(ks)    ((ks)->ks_code)
  109. #define KS_QUAL(ks)    ((ks)->ks_qualifiers)
  110. #define KS_MASK(ks)    ((ks)->ks_qualmask)
  111.  
  112. #define KS_FILL(ks,q,m,c)  { KS_QUAL(ks) = q; KS_MASK(ks) = m; KS_CODE(ks) = c; }
  113. #define KS_COPY(kd,ks)     KS_FILL(kd, KS_QUAL(ks), KS_MASK(ks), KS_CODE(ks))
  114.  
  115. #define KT_SLOT(kt,ks) ((kt)->hash[KS_CODE(ks)&HASHMASK])
  116.  
  117. #define KS_MATCH_EXACT(k0,k1)  ((KS_CODE(k0) == KS_CODE(k1)) ? ((KS_MASK(k0) == KS_MASK(k1)) ? (KS_QUAL(k0) == KS_QUAL(k1)) : FALSE) : FALSE)
  118. #define KS_MATCH_APPROX(k0,k1) ((KS_CODE(k0) == KS_CODE(k1)) ? (KS_QUAL(k0) == (KS_MASK(k1) & KS_QUAL(k1))) : FALSE)
  119.  
  120.  
  121. /* not used yet */
  122. #define KS_IS_RAWCODE(ks) (is_rawc[KS_CODE(ks)] != 0 && (KS_QUAL(ks)&QUAL_UP) == 0)
  123.  
  124.  
  125.  
  126. /**************************************
  127.            Prototypes
  128. **************************************/
  129.  
  130. extern long ext_qualifiers;
  131. extern int  qualifier (char *);
  132.  
  133. extern void do_map     (void);
  134. extern void do_unmap     (void);
  135. extern void do_keyload     (void);
  136. extern void do_keysave     (void);
  137. extern void do_qualifier (void);
  138. extern void do_new_keytable (void);
  139. extern void do_del_keytable (void);
  140. extern void do_use_keytable (void);
  141.  
  142. extern void   keyload         (KEYTABLE * kt, char * name);
  143. extern void   keysave         (KEYTABLE * kt, char * name);
  144. extern int    loadkeys         (KEYTABLE * kt, FILE * fi, int * lineno);
  145. extern int    savekeys         (KEYTABLE * kt, FILE * fo);
  146. extern HASH * findhash         (KEYTABLE * kt, KEYSPEC * ks, UBYTE *);
  147. extern APTR   keyspec2macro  (KEYTABLE * kt, const UBYTE * str);
  148. extern int    resethash      (KEYTABLE * kt);
  149. extern int    unmapkey         (KEYTABLE * kt, const UBYTE * key);
  150. extern int    mapkey         (KEYTABLE * kt, const UBYTE * key, const UBYTE * value, const UBYTE *help);
  151. extern int    remhash         (KEYTABLE * kt, KEYSPEC * ks);
  152. extern int    addhash         (KEYTABLE * kt, KEYSPEC * ks, const UBYTE * comm, const UBYTE * help);
  153. extern void   dealloc_hash   (KEYTABLE * kt);
  154. extern KEYTABLE * get_keytable      (char * name);
  155. extern KEYTABLE * new_keytable      (char * name, int defaults);
  156. extern void      delete_keytable (KEYTABLE * kt, int force);
  157. extern void      exit_keytables (void);
  158.  
  159. extern BOOL   get_codequal   (const UBYTE * str, KEYSPEC *ks);
  160. extern UBYTE *cqtoa         (KEYSPEC *ks);
  161. extern TQUAL  iqual2qual     (unsigned long qual, int blen, char * buf, int code);
  162. extern ULONG  qual2iqual     (TQUAL qual);
  163. extern BOOL   a2iqual         (const UBYTE * str, ULONG *piqual);
  164. extern UBYTE *iqual2a         (ULONG iqual);
  165. extern UBYTE  CtoA         (TCODE c);
  166. extern TQUAL  CIgnoreQ         (TCODE c);
  167. extern BOOL   IsRawC         (KEYSPEC * ks);
  168. extern void   keyboard_init  (void);
  169. extern void   init_kb         (void);
  170. extern void   exit_kb         (void);
  171. extern struct Library * ConsoleDevice;
  172. extern int    DeadKeyConvert (struct IntuiMessage * msg, UBYTE * buf, int bufsize, struct KeyMap * keymap);
  173.  
  174. #endif
  175.  
  176. extern void keyctl (struct IntuiMessage *, int, ULONG);  /* PATCH_NULL [14 Feb 1993] : changed to void */
  177. extern char*keyspectomacro(char*);
  178.  
  179. #endif /* KEYHASHES_H */
  180.  
  181. /******************************************************************************
  182. *****  ENDE keyhashes.h
  183. ******************************************************************************/
  184.  
  185.